文章目录
  1. 1. Core animation教程:层坐标及转换
  2. 2. Core animation教程:层坐标及转换
    1. 2.1. 单独窗口打印放大字号缩小字号
    2. 2.2.

Core animation教程:层坐标及转换

Ios技术文章收录 坐标计算

Core animation教程:层坐标及转换

2010-01-2017:39-18.jpg

0评论
阅读数:5321

单独窗口打印放大字号缩小字号

##

这章节主要描述层坐标的构成要素,构成要素之间的关系及如何转换产生复杂的效果。

[作者  long4success

原帖地址 �]( “分享到网易微博”)�http://www.cocoachina.com/bbs/read.php?tid-10972-fpage-0-toread--page-1.html

这章节主要描述层坐标的构成要素,构成要素之间的关系及如何转换产生复杂的效果。

1    层坐标系统

层 坐标使用了和Quanz图形一样的坐标系统。默认情况下,原点(0.0, 0.0)在左下角,向右及向上增长。请注意:该坐标系统是不同于UIView实例的坐标系统,UIView系统的原点在左上角,向右及向下增长。每个层的 实例都维护自己的坐标系统,定位所有的子层及绘图时都是相对于这个坐标系统。

2    层的几何坐标

层的几何坐标系统图:

-19.jpg

2.1     Bounds

没有人不知道这东东,跳过。

2.2    Position

CGPoint类型,指定了相对于父层(superlayer)的位置,由父层的坐标系统来表示。

2.3    Frame

改变层的frame时,层的position和bounds会相应的改变,但层并没有frame属性,它是由层的position, bounds, anchorPoint(参照点) 和transform计算而来。

2.4    Anchor point 参照点

今天的重点属性。一定要理解。该属性是在层的bounds范围内的一个点,值为0.0到1.0。所有的转换都是相对于这个点进行计算的。

下图是三个anchor point的值:

  

-20.jpg

接下来,我们来看一下frame, bounds, position 及 anchorPoint之间的关系。

如下图:

-21.jpg

在 这个图中,anchor point的默认值为(0.5,0.5),相当于层的中心。如果你设置frame为(40.0, 60.0, 120.0, 80.0),则position值会被自动设置为(100,100)。我们还可以看到旋转和缩放的转换计算都是相对于参照点进行的。

下图的frame的大小和图3是一样的,但是anchor point为(0.0,0.0):

-22.jpg

2.5    cornerRadius

当要绘图,剪辑子层,画边框及阴影时,可以指定层所使用的半径大小以产生圆角效果。

3    层的几何坐标转换

上面讲了那么多,都是为这一小节坐铺垫的。

CATransform3D结构体定义了一个用于旋转,缩放,偏移,倾斜及应用透视变换

的三维坐标变换。原型如下:

struct CATransform3D

{

  CGFloat m11, m12, m13, m14;

  CGFloat m21, m22, m23, m24;

  CGFloat m31, m32, m33, m34;

  CGFloat m41, m42, m43, m44;

};

typedef struct CATransform3D CATransform3D;

可以将该结构体赋值给层的两个属性transform 或者sublayerTransform,就可以实现坐标转换。

你可以通过以下三个方法来创建和修改这个结构体:

1)    使用CATransform3D函数获取

2)    直接修改结构体数据成员

3)    使用键值编码和键路径(key paths)

3.1    转换函数

3.1.1    平移,缩放及旋转转换函数(以下如何进行坐标转换计算实在是看不懂,线性代数太滥了,真后悔当初没好好学,^&^。高手请指教):

-23.jpg

示例:

reflectionLayer.transform = CATransform3DMakeScale(1.0, -1.0, 1.0); 

该函数使层的Y坐标反转,产生倒影效果。

论谈里有一个关于CATransform3DMakeScale矩阵转换的使用例子,大家可以看一下,对于理解矩阵转换还是很有帮助的,地址:http://www.[cocoachina.com/macdev/ca/2009/0611/33.html](http://cocoachina.com/macdev/ca/2009/0611/33.html)

系统也提供了反转矩阵的函数CATransform3DInvert。

3.1.2    仿射转换函数:

  

-24.jpg

3.1.3    测试是否是相等的函数: 

-25.jpg

3.2    使用键路径(key paths)修改转换函数 

-26.jpg

示例:

myLayer.transform.rotation.x=0;

[myLayer setValue:[NSNumber numberWithInt:0] forKeyPath:@”transform.rotation.x”];

相关日志  Core animation核心动画渲染架构 http://cocoachina.com/macdev/objc/2010/0120/349.html?1263981109

                Core animation简介  http://cocoachina.com/macdev/objc/2010/0120/348.html

文章目录
  1. 1. Core animation教程:层坐标及转换
  2. 2. Core animation教程:层坐标及转换
    1. 2.1. 单独窗口打印放大字号缩小字号
    2. 2.2.